home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
docs
/
complex
/
screen.c
< prev
Wrap
C/C++ Source or Header
|
2000-05-22
|
2KB
|
81 lines
#include <iocslib.h>
#include <doslib.h>
/* 画面の初期化 */
/* 512×512ドット,ピクセル比1:1,65536色 */
void init_screen()
{
volatile unsigned short *p;
int ssp;
/* ファンクションキー表示を消す */
C_FNKMOD(3);
#if 0
CRTMOD(12);
G_CLR_ON();
#endif
/* スーパーバイザモードへ移行 */
ssp = B_SUPER(0);
/* 垂直帰線期間を待つ */
while ((*((volatile unsigned char *)0x00e88001) & 0x10) == 0);
while ((*((volatile unsigned char *)0x00e88001) & 0x10) != 0);
/* ビデオコントローラの設定(65536色,SPRITE>TEXT>GRAPHIC) */
*((volatile unsigned short *)0x00e82400) = 0x0003;
*((volatile unsigned short *)0x00e82500) = 0x06e4;
*((volatile unsigned short *)0x00e82600) = 0x006f;
/* CRTCのレジスタの設定(512×512ドット,ピクセル比1:1,65536色) */
p = (volatile unsigned short *)0x00e80000;
if ((p[20] & 0xff) > 0x16) {
/* 画面モードが低くなる */
p[20] = 0x0316; /* メモリモードセット/表示モードセット */
p[1] = 0x000e; /* 水平同期終了位置 */
p[2] = 0x002c; /* 水平表示開始位置 */
p[3] = 0x006c; /* 水平表示終了位置 */
p[4] = 0x0237; /* 垂直トータル */
p[5] = 0x0005; /* 垂直同期終了位置 */
p[6] = 0x0028; /* 垂直表示開始位置 */
p[7] = 0x0228; /* 垂直表示終了位置 */
p[0] = 0x0089; /* 水平トータル */
} else {
/* 画面モードが同じか高くなる */
p[0] = 0x0089; /* 水平トータル */
p[1] = 0x000e; /* 水平同期終了位置 */
p[2] = 0x002c; /* 水平表示開始位置 */
p[3] = 0x006c; /* 水平表示終了位置 */
p[4] = 0x0237; /* 垂直トータル */
p[5] = 0x0005; /* 垂直同期終了位置 */
p[6] = 0x0028; /* 垂直表示開始位置 */
p[7] = 0x0228; /* 垂直表示終了位置 */
p[20] = 0x0316; /* メモリモードセット/表示モードセット */
}
/* HRLビットクリア */
*((volatile unsigned char *)0x00e8e007) &= ~0x02;
/* ユーザモードに戻る */
if (ssp >= 0) {
B_SUPER(ssp);
}
/* コンソールのサイズは64桁×32行 */
B_CONSOL(0, 0, 64-1, 32-1);
/* コンソールをクリア */
B_CLR_AL();
/* コンソールのカーソルを消す */
B_CUROFF();
}
/* 画面の後始末 */
void tini_screen()
{
/* コンソールのカーソルを元に戻す */
B_CURON();
}